; ModuleID = 'save_temp/test.opt.bc'
source_filename = "0-default"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%TypeTemplate = type { i8*, i8, i8, i16, i16, i8*, i8*, i8*, i8*, %ExtensionDef**, i16 }
%ExtensionDef = type { i32, i8, i8*, i8*, i8*, i8* }
%TypeInfo = type { i8*, i8, i8, i16, i32, %BitMap*, i32, i8, i8, i16, i32*, i8*, i8*, i8*, %TypeInfo*, %ExtensionDef**, i8*, i8* }
%BitMap = type { i32, [0 x i8] }
%Unit.Type = type {}
%"record.std.core:String" = type { i8 addrspace(1)*, i32, i32 }
%default_default.pkgInfoType = type { i8*, i32, i32, i32, i32, i64, i8*, i8*, i8*, i8*, i8* }
%"ObjLayout.std.core:Future<T>" = type { i8 addrspace(1)*, i8 addrspace(1)*, i8 addrspace(1)* }
%struct._param = type { void (i8*)*, i8* }

@Closure.tt = external global %TypeTemplate
@"default:$ClN7default7cj_mainHvEL0_E_9$0.ti" = internal global %TypeInfo { i8* getelementptr inbounds ([40 x i8], [40 x i8]* @"default:$ClN7default7cj_mainHvEL0_E_9$0.name", i32 0, i32 0), i8 -128, i8 64, i16 2, i32 16, %BitMap* inttoptr (i64 -9223372036854775808 to %BitMap*), i32 0, i8 8, i8 0, i16 -32768, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @"default:$ClN7default7cj_mainHvEL0_E_9$0.ti.offsets", i32 0, i32 0), i8* null, i8* null, i8* bitcast ([2 x %TypeInfo*]* @"default:$ClN7default7cj_mainHvEL0_E_9$0.ti.fields" to i8*), %TypeInfo* @"Closure<()->Int64>.ti", %ExtensionDef** null, i8* null, i8* null }, no_sanitize_address, !RelatedType !0 #0
@"default:$ClN7default7cj_mainHvEL_E_2$0.ti" = internal global %TypeInfo { i8* getelementptr inbounds ([39 x i8], [39 x i8]* @"default:$ClN7default7cj_mainHvEL_E_2$0.name", i32 0, i32 0), i8 -128, i8 64, i16 2, i32 16, %BitMap* inttoptr (i64 -9223372036854775808 to %BitMap*), i32 0, i8 8, i8 0, i16 -32768, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @"default:$ClN7default7cj_mainHvEL_E_2$0.ti.offsets", i32 0, i32 0), i8* null, i8* null, i8* bitcast ([2 x %TypeInfo*]* @"default:$ClN7default7cj_mainHvEL_E_2$0.ti.fields" to i8*), %TypeInfo* @"Closure<()->Int64>.ti", %ExtensionDef** null, i8* null, i8* null }, no_sanitize_address, !RelatedType !1 #0
@_CN7default3gloE = global i64 0, align 8, !GlobalVarType !2, !ReflectionGV !3 #1
@"$has_applied_pkg_init_func" = internal global i1 false, align 8, !GlobalVarType !5 #1
@has_invoked_pkg_init_literal = internal global i1 false, align 8, !GlobalVarType !5 #1
@Int64.ti = external global %TypeInfo, !RelatedType !6 #0
@Unit.Val = weak_odr global %Unit.Type undef #1
@"std.core:Exception.ti" = external global %TypeInfo, !RelatedType !7 #0
@"$const_cjstring.dmHDgHzo4y" = private constant %"record.std.core:String" { i8 addrspace(1)* addrspacecast (i8* bitcast ({ i8*, i64, [14 x i8] }* @"$const_cjstring_data.dmHDgHzo4y" to i8*) to i8 addrspace(1)*), i32 0, i32 14 } #2
@"std.core:Future<Int64>.ti" = internal global %TypeInfo { i8* getelementptr inbounds ([23 x i8], [23 x i8]* @"std.core:Future<Int64>.name", i32 0, i32 0), i8 -128, i8 69, i16 3, i32 160, %BitMap* inttoptr (i64 -9223372036854775801 to %BitMap*), i32 0, i8 8, i8 1, i16 -32768, i32* getelementptr inbounds ([3 x i32], [3 x i32]* @"std.core:Future<Int64>.ti.offsets", i32 0, i32 0), i8* bitcast (%TypeTemplate* @"std.core:Future.tt" to i8*), i8* bitcast ([1 x %TypeInfo*]* @"std.core:Future<Int64>.ti.typeArgs" to i8*), i8* bitcast ([3 x %TypeInfo*]* @"std.core:Future<Int64>.ti.fields" to i8*), %TypeInfo* @"std.core:Object.ti", %ExtensionDef** null, i8* null, i8* null }, no_sanitize_address, !RelatedType !8 #3
@"std.core:SpawnException.ti" = external global %TypeInfo, !RelatedType !9 #4
@cj.sdk.version = private global [6 x i8] c"1.0.3\00", align 1
@"std.core:Future<Int64>.name" = private global [23 x i8] c"std.core:Future<Int64>\00", align 1 #5
@"std.core:Thread.ti" = external global %TypeInfo, !RelatedType !10 #4
@"std.core:FutureResult.ti" = external global %TypeInfo, !RelatedType !11 #0
@"Closure<()->Int64>.ti" = internal global %TypeInfo { i8* getelementptr inbounds ([19 x i8], [19 x i8]* @"Closure<()->Int64>.name", i32 0, i32 0), i8 -125, i8 64, i16 2, i32 16, %BitMap* inttoptr (i64 -9223372036854775808 to %BitMap*), i32 0, i8 8, i8 1, i16 -32768, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @"Closure<()->Int64>.ti.offsets", i32 0, i32 0), i8* bitcast (%TypeTemplate* @Closure.tt to i8*), i8* bitcast ([1 x %TypeInfo*]* @"Closure<()->Int64>.ti.typeArgs" to i8*), i8* bitcast ([2 x %TypeInfo*]* @"Closure<()->Int64>.ti.fields" to i8*), %TypeInfo* null, %ExtensionDef** null, i8* null, i8* null }, no_sanitize_address, !RelatedType !12 #0
@"std.core:Future<Int64>.ti.fields" = private global [3 x %TypeInfo*] [%TypeInfo* @"std.core:Thread.ti", %TypeInfo* @"std.core:FutureResult.ti", %TypeInfo* @"Closure<()->Int64>.ti"] #6
@"std.core:Future.tt" = external global %TypeTemplate
@"std.core:Future<Int64>.ti.offsets" = private global [3 x i32] [i32 0, i32 8, i32 16] #7
@"std.core:Future<Int64>.ti.typeArgs" = private global [1 x %TypeInfo*] [%TypeInfo* @Int64.ti] #8
@"std.core:Object.ti" = external global %TypeInfo, !RelatedType !13 #0
@"Closure<()->Int64>.name" = private global [19 x i8] c"Closure<()->Int64>\00", align 1 #5
@"Closure<()->Int64>.ti.fields" = private global [2 x %TypeInfo*] [%TypeInfo* @Int64.ti, %TypeInfo* @Int64.ti] #6
@"Closure<()->Int64>.ti.offsets" = private global [2 x i32] [i32 0, i32 8] #7
@"()->Int64.ti" = internal global %TypeInfo { i8* getelementptr inbounds ([10 x i8], [10 x i8]* @"()->Int64.name", i32 0, i32 0), i8 19, i8 0, i16 0, i32 8, %BitMap* null, i32 0, i8 8, i8 1, i16 -32768, i32* null, i8* bitcast (%TypeTemplate* @CFunc.tt to i8*), i8* bitcast ([1 x %TypeInfo*]* @"()->Int64.ti.typeArgs" to i8*), i8* null, %TypeInfo* null, %ExtensionDef** null, i8* null, i8* null }, !RelatedType !14 #0
@"Closure<()->Int64>.ti.typeArgs" = private global [1 x %TypeInfo*] [%TypeInfo* @"()->Int64.ti"] #8
@"()->Int64.name" = private global [10 x i8] c"()->Int64\00", align 1 #5
@CFunc.tt = external global %TypeTemplate
@"()->Int64.ti.typeArgs" = private global [1 x %TypeInfo*] [%TypeInfo* @Int64.ti] #8
@"default:$ClN7default7cj_mainHvEL_E_2$0.name" = private global [39 x i8] c"default:$ClN7default7cj_mainHvEL_E_2$0\00", align 1 #5
@"default:$ClN7default7cj_mainHvEL_E_2$0.ti.fields" = private global [2 x %TypeInfo*] [%TypeInfo* @Int64.ti, %TypeInfo* @Int64.ti] #6
@"default:$ClN7default7cj_mainHvEL_E_2$0.ti.offsets" = private global [2 x i32] [i32 0, i32 8] #7
@"default:$ClN7default7cj_mainHvEL0_E_9$0.name" = private global [40 x i8] c"default:$ClN7default7cj_mainHvEL0_E_9$0\00", align 1 #5
@"default:$ClN7default7cj_mainHvEL0_E_9$0.ti.fields" = private global [2 x %TypeInfo*] [%TypeInfo* @Int64.ti, %TypeInfo* @Int64.ti] #6
@"default:$ClN7default7cj_mainHvEL0_E_9$0.ti.offsets" = private global [2 x i32] [i32 0, i32 8] #7
@"RawArray<UInt8>.ti" = internal global %TypeInfo { i8* getelementptr inbounds ([16 x i8], [16 x i8]* @"RawArray<UInt8>.name", i32 0, i32 0), i8 -126, i8 64, i16 0, i32 0, %BitMap* null, i32 0, i8 0, i8 0, i16 -32768, i32* null, i8* bitcast (%TypeTemplate* @RawArray.tt to i8*), i8* null, i8* null, %TypeInfo* @UInt8.ti, %ExtensionDef** null, i8* null, i8* null }, no_sanitize_address, !RelatedType !15 #4
@UInt8.ti = external global %TypeInfo, !RelatedType !16
@"RawArray<UInt8>.name" = private global [16 x i8] c"RawArray<UInt8>\00", align 1 #5
@RawArray.tt = external global %TypeTemplate
@"$const_cjstring_data.dmHDgHzo4y" = private constant { i8*, i64, [14 x i8] } { i8* bitcast (%TypeInfo* @"RawArray<UInt8>.ti" to i8*), i64 14, [14 x i8] c"cj_main_return" } #9
@StaticGenericTIs = private global [3 x %TypeInfo*] [%TypeInfo* @"()->Int64.ti", %TypeInfo* @"std.core:Future<Int64>.ti", %TypeInfo* @"Closure<()->Int64>.ti"] #10
@default_default.packageInfo = global %default_default.pkgInfoType { i8* null, i32 0, i32 0, i32 0, i32 0, i64 1, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @default.reflectStr, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @default.reflectStr, i32 0, i32 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @NullString.reflectStr, i32 0, i32 0), i8* null, i8* null }, no_sanitize_address #11
@default.reflectStr = internal global [8 x i8] c"default\00", align 1 #11
@NullString.reflectStr = internal global [1 x i8] zeroinitializer, align 1 #11
@_CN7default12cangjie_mainHv.CJStubGV = internal global void ()* @_CN7default12cangjie_mainHv #12
@wrapper.F0uPuE.CJStubGV = internal global void (void (i8*)*, i8*)* @wrapper.F0uPuE #12
@CJ_MCC_HandleSafepoint.CJStubGV = internal global void ()* @CJ_MCC_HandleSafepoint #12

define internal void @"_CCN7default7cj_mainHvEL0_E_9$g"(i8 addrspace(1)** sret(i8 addrspace(1)*) %0, i8 addrspace(1)* %1, %TypeInfo* %outerTI) gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !28 {
bb0:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0) [ "gc-live"(i8 addrspace(1)* %1) ]
  %2 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token2, i32 0, i32 0) ; (%1, %1)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i64 (i8 addrspace(1)*)* @_CN7default7cj_mainHvEL0_E_9, i32 1, i32 0, i8 addrspace(1)* %2) [ "gc-live"(i8 addrspace(1)* %2) ], !dbg !33
  %3 = call i64 @llvm.cj.gc.result.i64(token %token4), !dbg !33
  %4 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token4, i32 0, i32 0), !dbg !33 ; (%2, %2)
  %token6 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32)* @CJ_MCC_NewObject, i32 2, i32 0, i8* bitcast (%TypeInfo* @Int64.ti to i8*), i32 16), !dbg !33
  %5 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token6), !dbg !33
  %6 = bitcast i8 addrspace(1)* %5 to i8* addrspace(1)*, !dbg !33
  %ti.payload = getelementptr i8*, i8* addrspace(1)* %6, i32 1, !dbg !33
  %7 = bitcast i8* addrspace(1)* %ti.payload to i64 addrspace(1)*, !dbg !33
  store i64 %3, i64 addrspace(1)* %7, align 8, !dbg !33
  br label %handle_store_non_ref, !dbg !33

handle_store_non_ref:                             ; preds = %bb0
  %8 = load i8 addrspace(1)*, i8 addrspace(1)** %0, align 8, !dbg !33
  call void @llvm.cj.assign.generic(i8 addrspace(1)* %8, i8 addrspace(1)* %5, i8* bitcast (%TypeInfo* @Int64.ti to i8*)), !dbg !33
  br label %store_exit, !dbg !33

store_exit:                                       ; preds = %handle_store_non_ref
  ret void, !dbg !33
}

define private i32 @"__cj_personality_v0$"(...) {
entry:
  ret i32 0
}

define internal i64 @_CN7default7cj_mainHvEL0_E_9(i8 addrspace(1)* %0) #13 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !34 {
allocas:
  %1 = alloca i64, align 8
  br label %bb5

bb5:                                              ; preds = %allocas
  store i64 2, i64* %1, align 8, !dbg !36
  %2 = load i64, i64* %1, align 8, !dbg !36
  ret i64 %2, !dbg !36
}

declare i8 addrspace(1)* @llvm.cj.malloc.object(i8*, i32)

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.cj.assign.generic(i8 addrspace(1)* noalias nocapture writeonly, i8 addrspace(1)* noalias nocapture readonly, i8* noalias nocapture readonly) #14

define internal i64 @"_CCN7default7cj_mainHvEL0_E_9$i"(i8 addrspace(1)* %0, %TypeInfo* %outerTI) gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !37 {
allocas:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %1 = alloca i64, align 8
  br label %bb0

bb0:                                              ; preds = %allocas
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0) [ "gc-live"(i8 addrspace(1)* %0) ]
  %2 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token2, i32 0, i32 0) ; (%0, %0)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i64 (i8 addrspace(1)*)* @_CN7default7cj_mainHvEL0_E_9, i32 1, i32 0, i8 addrspace(1)* %2) [ "gc-live"(i8 addrspace(1)* %2) ], !dbg !38
  %3 = call i64 @llvm.cj.gc.result.i64(token %token4), !dbg !38
  %4 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token4, i32 0, i32 0), !dbg !38 ; (%2, %2)
  store i64 %3, i64* %1, align 8, !dbg !38
  %5 = load i64, i64* %1, align 8, !dbg !38
  ret i64 %5, !dbg !38
}

define internal void @"_CCN7default7cj_mainHvEL_E_2$g"(i8 addrspace(1)** sret(i8 addrspace(1)*) %0, i8 addrspace(1)* %1, %TypeInfo* %outerTI) gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !39 {
bb0:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0) [ "gc-live"(i8 addrspace(1)* %1) ]
  %2 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token2, i32 0, i32 0) ; (%1, %1)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i64 (i8 addrspace(1)*)* @_CN7default7cj_mainHvEL_E_2, i32 1, i32 0, i8 addrspace(1)* %2) [ "gc-live"(i8 addrspace(1)* %2) ], !dbg !40
  %3 = call i64 @llvm.cj.gc.result.i64(token %token4), !dbg !40
  %4 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token4, i32 0, i32 0), !dbg !40 ; (%2, %2)
  %token6 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32)* @CJ_MCC_NewObject, i32 2, i32 0, i8* bitcast (%TypeInfo* @Int64.ti to i8*), i32 16), !dbg !40
  %5 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token6), !dbg !40
  %6 = bitcast i8 addrspace(1)* %5 to i8* addrspace(1)*, !dbg !40
  %ti.payload = getelementptr i8*, i8* addrspace(1)* %6, i32 1, !dbg !40
  %7 = bitcast i8* addrspace(1)* %ti.payload to i64 addrspace(1)*, !dbg !40
  store i64 %3, i64 addrspace(1)* %7, align 8, !dbg !40
  br label %handle_store_non_ref, !dbg !40

handle_store_non_ref:                             ; preds = %bb0
  %8 = load i8 addrspace(1)*, i8 addrspace(1)** %0, align 8, !dbg !40
  call void @llvm.cj.assign.generic(i8 addrspace(1)* %8, i8 addrspace(1)* %5, i8* bitcast (%TypeInfo* @Int64.ti to i8*)), !dbg !40
  br label %store_exit, !dbg !40

store_exit:                                       ; preds = %handle_store_non_ref
  ret void, !dbg !40
}

define internal i64 @_CN7default7cj_mainHvEL_E_2(i8 addrspace(1)* %0) #13 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !41 {
allocas:
  %1 = alloca i64, align 8
  br label %bb2

bb2:                                              ; preds = %allocas
  store i64 1, i64* %1, align 8, !dbg !42
  %2 = load i64, i64* %1, align 8, !dbg !42
  ret i64 %2, !dbg !42
}

define internal i64 @"_CCN7default7cj_mainHvEL_E_2$i"(i8 addrspace(1)* %0, %TypeInfo* %outerTI) gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !43 {
allocas:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %1 = alloca i64, align 8
  br label %bb0

bb0:                                              ; preds = %allocas
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0) [ "gc-live"(i8 addrspace(1)* %0) ]
  %2 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token2, i32 0, i32 0) ; (%0, %0)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i64 (i8 addrspace(1)*)* @_CN7default7cj_mainHvEL_E_2, i32 1, i32 0, i8 addrspace(1)* %2) [ "gc-live"(i8 addrspace(1)* %2) ], !dbg !44
  %3 = call i64 @llvm.cj.gc.result.i64(token %token4), !dbg !44
  %4 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token4, i32 0, i32 0), !dbg !44 ; (%2, %2)
  store i64 %3, i64* %1, align 8, !dbg !44
  %5 = load i64, i64* %1, align 8, !dbg !44
  ret i64 %5, !dbg !44
}

define internal void @"_CGF7defaultUtest$ilHv"() #15 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !45 {
bb0:
  store i64 0, i64* @_CN7default3gloE, align 8, !dbg !46
  ret void, !dbg !46
}

; Function Attrs: noinline
define void @_CGP7defaultiiHv() #16 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !47 {
bb0:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %0 = load i1, i1* @"$has_applied_pkg_init_func", align 1, !dbg !48
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0)
  br i1 %0, label %bb1, label %bb2, !dbg !48

bb1:                                              ; preds = %bb0
  ret void, !dbg !48

bb2:                                              ; preds = %bb0
  store i1 true, i1* @"$has_applied_pkg_init_func", align 1, !dbg !48
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @_CGPatiiHv, i32 0, i32 0), !dbg !48
  call void @CJ_MRT_PreInitializePackage(i8* null), !dbg !48
  ret void, !dbg !48
}

declare void @_CGPatiiHv() #17 gc "cangjie"

; Function Attrs: nounwind
declare void @llvm.cj.pre.initialize.package(i8*) #18

; Function Attrs: noinline
define void @_CGP7defaultilHv() #19 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !49 {
bb0:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %0 = load i1, i1* @has_invoked_pkg_init_literal, align 1, !dbg !50
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0)
  br i1 %0, label %bb1, label %bb2, !dbg !50

bb1:                                              ; preds = %bb0
  ret void, !dbg !50

bb2:                                              ; preds = %bb0
  store i1 true, i1* @has_invoked_pkg_init_literal, align 1, !dbg !50
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @_CGPatilHv, i32 0, i32 0), !dbg !50
  %token6 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @"_CGF7defaultUtest$ilHv", i32 0, i32 0), !dbg !50
  ret void, !dbg !50
}

declare void @_CGPatilHv() gc "cangjie"

; Function Attrs: noinline
define internal void @_CN7default12cangjie_mainHv() #20 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !51 {
allocas:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %0 = alloca %Unit.Type, align 8
  %ret = alloca i64, align 8
  br label %bb0

bb0:                                              ; preds = %allocas
  store i64 1, i64* %ret, align 8, !dbg !52
  %token5 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0)
  %token7 = invoke token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i64 ()* @_CN7default7cj_mainHv, i32 0, i32 0)
          to label %normalDest unwind label %bb4, !dbg !53

normalDest:                                       ; preds = %bb0
  %1 = call i64 @llvm.cj.gc.result.i64(token %token7), !dbg !53
  br label %bb6, !dbg !53

bb6:                                              ; preds = %normalDest
  store i64 %1, i64* %ret, align 8, !dbg !55
  br label %bb14, !dbg !56

bb4:                                              ; preds = %bb0
  %2 = landingpad token
          catch i8* null
  %3 = call i8* @CJ_MCC_GetExceptionWrapper(), !dbg !57
  %4 = call i8 addrspace(1)* @CJ_MCC_PostThrowException(i8* %3), !dbg !57
  %5 = bitcast i8 addrspace(1)* %4 to %TypeInfo* addrspace(1)*, !dbg !59
  %ti = load %TypeInfo*, %TypeInfo* addrspace(1)* %5, align 8, !dbg !59
  %6 = bitcast %TypeInfo* %ti to i8*, !dbg !59
  %7 = call i1 @CJ_MCC_IsSubType(i8* %6, i8* bitcast (%TypeInfo* @"std.core:Exception.ti" to i8*)), !dbg !59
  br i1 %7, label %bb8, label %bb9, !dbg !60

bb14:                                             ; preds = %normalDest1, %bb6
  %token9 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (%Unit.Type*, %"record.std.core:String"*)* @_CNat7printlnHRNat6StringE, i32 2, i32 0, %Unit.Type* sret(%Unit.Type) %0, %"record.std.core:String"* @"$const_cjstring.dmHDgHzo4y"), !dbg !61
  ret void, !dbg !63

bb8:                                              ; preds = %bb4
  store i64 1, i64* %ret, align 8, !dbg !64
  %token11 = invoke token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (%Unit.Type*, i8 addrspace(1)*, %TypeInfo*)* @_CNat9Exception15printStackTraceHv, i32 3, i32 0, %Unit.Type* sret(%Unit.Type) %0, i8 addrspace(1)* %4, %TypeInfo* @"std.core:Exception.ti") [ "gc-live"(i8 addrspace(1)* %4) ]
          to label %normalDest1 unwind label %bb71, !dbg !66

normalDest1:                                      ; preds = %bb8
  %8 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token11, i32 0, i32 0), !dbg !66 ; (%4, %4)
  br label %bb14, !dbg !66

bb9:                                              ; preds = %bb4
  %token17 = invoke token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*)* @CJ_MCC_ThrowException, i32 1, i32 0, i8 addrspace(1)* %4)
          to label %normalDest2 unwind label %bb72, !dbg !67

normalDest2:                                      ; preds = %bb9
  unreachable, !dbg !67

bb71:                                             ; preds = %bb8
  %lpad = landingpad token
          catch i8* null
  %9 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %lpad, i32 0, i32 0), !dbg !66 ; (%4, %4)
  br label %bb7

bb72:                                             ; preds = %bb9
  %lpad3 = landingpad token
          catch i8* null
  br label %bb7

bb7:                                              ; preds = %bb72, %bb71
  %10 = call i8* @CJ_MCC_GetExceptionWrapper(), !dbg !67
  %11 = call i8 addrspace(1)* @CJ_MCC_PostThrowException(i8* %10), !dbg !67
  %token13 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (%Unit.Type*, %"record.std.core:String"*)* @_CNat7printlnHRNat6StringE, i32 2, i32 0, %Unit.Type* sret(%Unit.Type) %0, %"record.std.core:String"* @"$const_cjstring.dmHDgHzo4y") [ "gc-live"(i8 addrspace(1)* %11) ], !dbg !61
  %12 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token13, i32 0, i32 0), !dbg !68 ; (%11, %11)
  %token15 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*)* @CJ_MCC_ThrowException, i32 1, i32 0, i8 addrspace(1)* %12), !dbg !68
  unreachable, !dbg !68
}

define i64 @_CN7default7cj_mainHv() gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" !dbg !69 {
allocas:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %0 = alloca %Unit.Type, align 8
  %1 = alloca i64, align 8
  br label %bb0

bb0:                                              ; preds = %allocas
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32)* @CJ_MCC_NewObject, i32 2, i32 0, i8* bitcast (%TypeInfo* @"default:$ClN7default7cj_mainHvEL0_E_9$0.ti" to i8*), i32 24), !dbg !70
  %2 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token4), !dbg !70
  %3 = bitcast i8 addrspace(1)* %2 to i8* addrspace(1)*, !dbg !70
  %ti.payload = getelementptr i8*, i8* addrspace(1)* %3, i32 1, !dbg !70
  %4 = getelementptr inbounds i8*, i8* addrspace(1)* %ti.payload, i32 0, !dbg !70
  store i8* bitcast (void (i8 addrspace(1)**, i8 addrspace(1)*, %TypeInfo*)* @"_CCN7default7cj_mainHvEL0_E_9$g" to i8*), i8* addrspace(1)* %4, align 8, !dbg !70
  %5 = getelementptr inbounds i8*, i8* addrspace(1)* %ti.payload, i32 1, !dbg !70
  store i8* bitcast (i64 (i8 addrspace(1)*, %TypeInfo*)* @"_CCN7default7cj_mainHvEL0_E_9$i" to i8*), i8* addrspace(1)* %5, align 8, !dbg !70
  %token6 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32)* @CJ_MCC_NewObject, i32 2, i32 0, i8* bitcast (%TypeInfo* @"default:$ClN7default7cj_mainHvEL_E_2$0.ti" to i8*), i32 24) [ "gc-live"(i8 addrspace(1)* %2) ], !dbg !70
  %6 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token6), !dbg !70
  %7 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token6, i32 0, i32 0), !dbg !70 ; (%2, %2)
  %8 = bitcast i8 addrspace(1)* %6 to i8* addrspace(1)*, !dbg !70
  %ti.payload1 = getelementptr i8*, i8* addrspace(1)* %8, i32 1, !dbg !70
  %9 = getelementptr inbounds i8*, i8* addrspace(1)* %ti.payload1, i32 0, !dbg !70
  store i8* bitcast (void (i8 addrspace(1)**, i8 addrspace(1)*, %TypeInfo*)* @"_CCN7default7cj_mainHvEL_E_2$g" to i8*), i8* addrspace(1)* %9, align 8, !dbg !70
  %10 = getelementptr inbounds i8*, i8* addrspace(1)* %ti.payload1, i32 1, !dbg !70
  store i8* bitcast (i64 (i8 addrspace(1)*, %TypeInfo*)* @"_CCN7default7cj_mainHvEL_E_2$i" to i8*), i8* addrspace(1)* %10, align 8, !dbg !70
  %token8 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32, i1)* @CJ_MCC_NewPinnedObject, i32 3, i32 0, i8* bitcast (%TypeInfo* @"std.core:Future<Int64>.ti" to i8*), i32 168, i1 false) [ "gc-live"(i8 addrspace(1)* %7, i8 addrspace(1)* %6) ], !dbg !71
  %11 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token8), !dbg !71
  %12 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token8, i32 0, i32 0), !dbg !71 ; (%7, %7)
  %13 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token8, i32 1, i32 1), !dbg !71 ; (%6, %6)
  %token10 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*, i8 addrspace(1)*, %TypeInfo*)* @"_CNat6FutureIG_E6<init>HF0G_E", i32 3, i32 0, i8 addrspace(1)* %11, i8 addrspace(1)* %13, %TypeInfo* @"std.core:Future<Int64>.ti") [ "gc-live"(i8 addrspace(1)* %12, i8 addrspace(1)* %11, i8 addrspace(1)* %13) ], !dbg !71
  %14 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token10, i32 0, i32 0), !dbg !72 ; (%12, %12)
  %15 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token10, i32 1, i32 1), !dbg !72 ; (%11, %11)
  %16 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token10, i32 2, i32 2), !dbg !72 ; (%13, %13)
  %token12 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8* (void (%Unit.Type*, i8 addrspace(1)*, %TypeInfo*)*, i8 addrspace(1)*, i8*)* @CJ_MCC_NewCJThread, i32 3, i32 0, void (%Unit.Type*, i8 addrspace(1)*, %TypeInfo*)* @_CNat6FutureIG_E7executeHv, i8 addrspace(1)* %15, i8* null) [ "gc-live"(i8 addrspace(1)* %14, i8 addrspace(1)* %15) ], !dbg !72
  %17 = call i8* @llvm.cj.gc.result.p0i8(token %token12), !dbg !72
  %18 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token12, i32 0, i32 0), !dbg !72 ; (%14, %14)
  %19 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token12, i32 1, i32 1), !dbg !72 ; (%15, %15)
  %20 = icmp eq i8* %17, null, !dbg !72
  br i1 %20, label %if.throw, label %if.end, !dbg !72

if.throw:                                         ; preds = %bb0
  %21 = load i32, i32* getelementptr inbounds (%TypeInfo, %TypeInfo* @"std.core:SpawnException.ti", i32 0, i32 4), align 4, !dbg !72
  %22 = add i32 %21, 15, !dbg !72
  %23 = and i32 %22, -8, !dbg !72
  %token14 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32)* @CJ_MCC_NewObject, i32 2, i32 0, i8* bitcast (%TypeInfo* @"std.core:SpawnException.ti" to i8*), i32 %23), !dbg !72
  %24 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token14), !dbg !72
  %token16 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*, %TypeInfo*)* @"_CNat14SpawnException6<init>Hv", i32 2, i32 0, i8 addrspace(1)* %24, %TypeInfo* @"std.core:SpawnException.ti") [ "gc-live"(i8 addrspace(1)* %24) ], !dbg !72
  %25 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token16, i32 0, i32 0), !dbg !72 ; (%24, %24)
  %token36 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*)* @CJ_MCC_ThrowException, i32 1, i32 0, i8 addrspace(1)* %25), !dbg !72
  unreachable, !dbg !72

if.end:                                           ; preds = %bb0
  %26 = getelementptr i8, i8 addrspace(1)* %19, i32 8, !dbg !72
  %27 = bitcast i8 addrspace(1)* %26 to %"ObjLayout.std.core:Future<T>" addrspace(1)*, !dbg !72
  %28 = getelementptr inbounds %"ObjLayout.std.core:Future<T>", %"ObjLayout.std.core:Future<T>" addrspace(1)* %27, i32 0, i32 0, !dbg !72
  %29 = call i8 addrspace(1)* @llvm.cj.gcread.ref(i8 addrspace(1)* %19, i8 addrspace(1)* addrspace(1)* %28), !dbg !72
  %token18 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (%Unit.Type*, i8 addrspace(1)*, i8*, %TypeInfo*)* @_CNat6Thread24setRuntimeCJThreadHandleHPu, i32 4, i32 0, %Unit.Type* sret(%Unit.Type) %0, i8 addrspace(1)* %29, i8* %17, %TypeInfo* null) [ "gc-live"(i8 addrspace(1)* %18, i8 addrspace(1)* %29) ], !dbg !72
  %30 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token18, i32 0, i32 0), !dbg !73 ; (%18, %18)
  %31 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token18, i32 1, i32 1), !dbg !73 ; (%29, %29)
  %token20 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32, i1)* @CJ_MCC_NewPinnedObject, i32 3, i32 0, i8* bitcast (%TypeInfo* @"std.core:Future<Int64>.ti" to i8*), i32 168, i1 false) [ "gc-live"(i8 addrspace(1)* %30) ], !dbg !73
  %32 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token20), !dbg !73
  %33 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token20, i32 0, i32 0), !dbg !73 ; (%30, %30)
  %token22 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*, i8 addrspace(1)*, %TypeInfo*)* @"_CNat6FutureIG_E6<init>HF0G_E", i32 3, i32 0, i8 addrspace(1)* %32, i8 addrspace(1)* %33, %TypeInfo* @"std.core:Future<Int64>.ti") [ "gc-live"(i8 addrspace(1)* %32, i8 addrspace(1)* %33) ], !dbg !73
  %34 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token22, i32 0, i32 0), !dbg !74 ; (%32, %32)
  %35 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token22, i32 1, i32 1), !dbg !74 ; (%33, %33)
  %token24 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8* (void (%Unit.Type*, i8 addrspace(1)*, %TypeInfo*)*, i8 addrspace(1)*, i8*)* @CJ_MCC_NewCJThread, i32 3, i32 0, void (%Unit.Type*, i8 addrspace(1)*, %TypeInfo*)* @_CNat6FutureIG_E7executeHv, i8 addrspace(1)* %34, i8* null) [ "gc-live"(i8 addrspace(1)* %34) ], !dbg !74
  %36 = call i8* @llvm.cj.gc.result.p0i8(token %token24), !dbg !74
  %37 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token24, i32 0, i32 0), !dbg !74 ; (%34, %34)
  %38 = icmp eq i8* %36, null, !dbg !74
  br i1 %38, label %if.throw2, label %if.end3, !dbg !74

if.throw2:                                        ; preds = %if.end
  %39 = load i32, i32* getelementptr inbounds (%TypeInfo, %TypeInfo* @"std.core:SpawnException.ti", i32 0, i32 4), align 4, !dbg !74
  %40 = add i32 %39, 15, !dbg !74
  %41 = and i32 %40, -8, !dbg !74
  %token26 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, i8 addrspace(1)* (i8*, i32)* @CJ_MCC_NewObject, i32 2, i32 0, i8* bitcast (%TypeInfo* @"std.core:SpawnException.ti" to i8*), i32 %41), !dbg !74
  %42 = call i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token %token26), !dbg !74
  %token28 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*, %TypeInfo*)* @"_CNat14SpawnException6<init>Hv", i32 2, i32 0, i8 addrspace(1)* %42, %TypeInfo* @"std.core:SpawnException.ti") [ "gc-live"(i8 addrspace(1)* %42) ], !dbg !74
  %43 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token28, i32 0, i32 0), !dbg !74 ; (%42, %42)
  %token34 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (i8 addrspace(1)*)* @CJ_MCC_ThrowException, i32 1, i32 0, i8 addrspace(1)* %43), !dbg !74
  unreachable, !dbg !74

if.end3:                                          ; preds = %if.end
  %44 = getelementptr i8, i8 addrspace(1)* %37, i32 8, !dbg !74
  %45 = bitcast i8 addrspace(1)* %44 to %"ObjLayout.std.core:Future<T>" addrspace(1)*, !dbg !74
  %46 = getelementptr inbounds %"ObjLayout.std.core:Future<T>", %"ObjLayout.std.core:Future<T>" addrspace(1)* %45, i32 0, i32 0, !dbg !74
  %47 = call i8 addrspace(1)* @llvm.cj.gcread.ref(i8 addrspace(1)* %37, i8 addrspace(1)* addrspace(1)* %46), !dbg !74
  %token30 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (%Unit.Type*, i8 addrspace(1)*, i8*, %TypeInfo*)* @_CNat6Thread24setRuntimeCJThreadHandleHPu, i32 4, i32 0, %Unit.Type* sret(%Unit.Type) %0, i8 addrspace(1)* %47, i8* %36, %TypeInfo* null) [ "gc-live"(i8 addrspace(1)* %47) ], !dbg !74
  %48 = call coldcc i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token %token30, i32 0, i32 0), !dbg !75 ; (%47, %47)
  %49 = load i64, i64* @_CN7default3gloE, align 8, !dbg !75
  %token32 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (%Unit.Type*, i64)* @_CNat7printlnHl, i32 2, i32 0, %Unit.Type* sret(%Unit.Type) %0, i64 %49), !dbg !76
  store i64 0, i64* %1, align 8, !dbg !77
  %50 = load i64, i64* %1, align 8, !dbg !77
  ret i64 %50, !dbg !77
}

; Function Attrs: nounwind
declare i8* @llvm.cj.get.exception.wrapper() #18

; Function Attrs: nounwind
declare i8 addrspace(1)* @llvm.cj.post.throw.exception(i8*) #18

; Function Attrs: nounwind readnone speculatable willreturn
declare i1 @llvm.cj.is.subtype(i8* nocapture, i8* nocapture) #21

declare void @_CNat7printlnHRNat6StringE(%Unit.Type* sret(%Unit.Type), %"record.std.core:String"* nocapture) gc "cangjie"

declare void @_CNat9Exception15printStackTraceHv(%Unit.Type* sret(%Unit.Type), i8 addrspace(1)*, %TypeInfo*) gc "cangjie"

declare void @llvm.cj.throw.exception(i8 addrspace(1)*)

declare void @"_CNat6FutureIG_E6<init>HF0G_E"(i8 addrspace(1)*, i8 addrspace(1)*, %TypeInfo*) gc "cangjie"

declare void @_CNat6FutureIG_E7executeHv(%Unit.Type* sret(%Unit.Type), i8 addrspace(1)*, %TypeInfo*) gc "cangjie"

declare i8* @CJ_MCC_NewCJThread(void (%Unit.Type*, i8 addrspace(1)*, %TypeInfo*)*, i8 addrspace(1)*, i8*)

declare void @"_CNat14SpawnException6<init>Hv"(i8 addrspace(1)*, %TypeInfo*) gc "cangjie"

; Function Attrs: argmemonly nounwind readonly
declare i8 addrspace(1)* @llvm.cj.gcread.ref(i8 addrspace(1)* nocapture, i8 addrspace(1)* addrspace(1)* nocapture) #22

declare void @_CNat6Thread24setRuntimeCJThreadHandleHPu(%Unit.Type* sret(%Unit.Type), i8 addrspace(1)*, i8*, %TypeInfo*) gc "cangjie"

declare void @_CNat7printlnHl(%Unit.Type* sret(%Unit.Type), i64) gc "cangjie"

define void @cangjie_main() #23 !dbg !78 {
allocas:
  br label %bb0

bb0:                                              ; preds = %allocas
  call void @_CN7default12cangjie_mainHv(), !dbg !79
  ret void, !dbg !80
}

; Function Attrs: noinline
define void @_CGP7defaultirHv(i8* %param) #19 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" {
entry:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @_CGP7defaultifHv, i32 0, i32 0)
  %token6 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @_CGP7defaultilHv, i32 0, i32 0)
  %token8 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @_CGP7defaultiiHv, i32 0, i32 0)
  %0 = bitcast i8* %param to %struct._param*
  %1 = getelementptr inbounds %struct._param, %struct._param* %0, i32 0, i32 0
  %2 = load void (i8*)*, void (i8*)** %1, align 8
  %3 = getelementptr inbounds %struct._param, %struct._param* %0, i32 0, i32 1
  %4 = load i8*, i8** %3, align 8
  %token10 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void (void (i8*)*, i8*)* @wrapper.F0uPuE, i32 2, i32 0, void (i8*)* %2, i8* %4)
  ret void
}

; Function Attrs: noinline
define void @_CGP7defaultifHv() #19 gc "cangjie" personality i32 (...)* @"__cj_personality_v0$" {
entry:
  %token = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 4, i32 0, void ()* @CJ_MCC_StackCheck, i32 0, i32 0)
  %token2 = call cangjiegccc token (...) @llvm.cj.gc.statepoint(i64 3, i32 0, void ()* @CJ_MCC_HandleSafepoint, i32 0, i32 0)
  %token4 = call token (...) @llvm.cj.gc.statepoint(i64 0, i32 0, void ()* @_CGPatifHv, i32 0, i32 0)
  store i1 false, i1* @has_invoked_pkg_init_literal, align 1
  store i1 false, i1* @"$has_applied_pkg_init_func", align 1
  ret void
}

; Function Attrs: noinline
declare void @_CGPatifHv() #19

; Function Attrs: noinline
define private void @wrapper.F0uPuE(void (i8*)* %0, i8* %1) #24 {
entry:
  call void %0(i8* %1)
  ret void
}

declare void @CJ_MCC_C2NStub(...) #25

declare void @CJ_MCC_N2CStub(...) #25

declare i8 addrspace(1)* @CJ_MCC_OnFinalizerCreated(i8 addrspace(1)*) #25

declare i8 addrspace(1)* @CJ_MCC_NewObject(i8*, i32) #26

; Function Attrs: nounwind
declare void @CJ_MRT_PreInitializePackage(i8*) #27

; Function Attrs: nounwind
declare i8* @CJ_MCC_GetExceptionWrapper() #27

; Function Attrs: nounwind
declare i8 addrspace(1)* @CJ_MCC_PostThrowException(i8*) #27

; Function Attrs: nounwind speculatable willreturn
declare i1 @CJ_MCC_IsSubType(i8*, i8*) #28

declare void @CJ_MCC_ThrowException(i8 addrspace(1)*) #25

declare i8 addrspace(1)* @CJ_MCC_NewPinnedObject(i8*, i32, i1) #26

; Function Attrs: argmemonly nounwind
declare void @llvm.cj.gcread.struct(i8* writeonly, i8 addrspace(1)* noalias nocapture, i8 addrspace(1)* noalias nocapture readonly, i64) #29

; Function Attrs: argmemonly nounwind
declare void @llvm.cj.gcwrite.struct.p0i8(i8 addrspace(1)*, i8 addrspace(1)* noalias nocapture writeonly, i8* noalias nocapture readonly, i64) #29

; Function Attrs: argmemonly nounwind
declare void @llvm.cj.gcread.static.struct(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64) #29

; Function Attrs: argmemonly nounwind
declare void @llvm.cj.gcwrite.static.struct(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64) #29

declare void @CJ_MCC_StackCheck() local_unnamed_addr #30

declare cangjiegccc void @CJ_MCC_HandleSafepoint() local_unnamed_addr #31

declare void @__tmp_use(...)

declare token @llvm.cj.gc.statepoint(...)

; Function Attrs: nounwind readnone
declare i8 addrspace(1)* @llvm.cj.gc.relocate.p1i8(token, i32 immarg, i32 immarg) #32

; Function Attrs: nounwind readnone
declare i64 @llvm.cj.gc.result.i64(token) #32

; Function Attrs: nounwind readnone
declare i8 addrspace(1)* @llvm.cj.gc.result.p1i8(token) #32

; Function Attrs: nounwind readnone
declare i8* @llvm.cj.gc.result.p0i8(token) #32

attributes #0 = { "CFileKlass" "can_malloc_with_fixed_size" }
attributes #1 = { "CJGlobalValue" }
attributes #2 = { "cjstring_literal" }
attributes #3 = { "CFileKlass" "Future" }
attributes #4 = { "CFileKlass" }
attributes #5 = { "CJTypeName" }
attributes #6 = { "CJTIFields" }
attributes #7 = { "CJTIOffsets" }
attributes #8 = { "CJTITypeArgs" }
attributes #9 = { "cjstring_data" }
attributes #10 = { "CFileStaticGenericTI" }
attributes #11 = { "CFileReflect" }
attributes #12 = { "cj-native" }
attributes #13 = { "UsedByClosure" "cj_fast_call" "leaf-function" }
attributes #14 = { argmemonly nounwind willreturn }
attributes #15 = { "cj_fast_call" "leaf-function" }
attributes #16 = { noinline "cjinit" }
attributes #17 = { "cjinit" }
attributes #18 = { nounwind }
attributes #19 = { noinline }
attributes #20 = { noinline "c2cj" }
attributes #21 = { nounwind readnone speculatable willreturn }
attributes #22 = { argmemonly nounwind readonly }
attributes #23 = { "cjstub" }
attributes #24 = { noinline "cj2c" }
attributes #25 = { "cj-runtime" "gc-leaf-function" }
attributes #26 = { "cj-heapmalloc" "cj-runtime" }
attributes #27 = { nounwind "cj-runtime" "gc-leaf-function" }
attributes #28 = { nounwind speculatable willreturn "cj-runtime" "gc-leaf-function" }
attributes #29 = { argmemonly nounwind }
attributes #30 = { "cj-stack-check" }
attributes #31 = { "gc-safepoint" }
attributes #32 = { nounwind readnone }

!llvm.module.flags = !{!17, !18, !19, !20, !21}
!llvm.dbg.cu = !{!22}
!pkg_init_func = !{!24}
!global_variables = !{!3}
!functions = !{}
!CodeGenAddedForIncr = !{}
!StaticGenericTIsForIncr = !{!25, !26, !27}

!0 = !{!"ObjLayout.default:$ClN7default7cj_mainHvEL0_E_9$0"}
!1 = !{!"ObjLayout.default:$ClN7default7cj_mainHvEL_E_2$0"}
!2 = !{!"l"}
!3 = !{!"glo", !"Int64.ti", !"_CN7default3gloE", !4}
!4 = !{!"none"}
!5 = !{!"b"}
!6 = !{!"Int64.Type"}
!7 = !{!"ObjLayout.std.core:Exception"}
!8 = !{!"ObjLayout.std.core:Future<T>"}
!9 = !{!"ObjLayout.std.core:SpawnException"}
!10 = !{!"ObjLayout.std.core:Thread"}
!11 = !{!"ObjLayout.std.core:FutureResult"}
!12 = !{!"ObjLayout.Closure<()->ccbase_r0>"}
!13 = !{!"ObjLayout.std.core:Object"}
!14 = !{!"Func.Type"}
!15 = !{!"ArrayLayout.UInt8"}
!16 = !{!"UInt8.Type"}
!17 = !{i32 2, !"CJBC", i32 1}
!18 = !{i32 2, !"Cangjie_OPT", i32 1}
!19 = !{i32 2, !"Debug Info Version", i32 3}
!20 = !{i32 2, !"Dwarf Version", i32 4}
!21 = !{i32 2, !"HasRewrittenStatepoint", i32 1}
!22 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !23, producer: "Cangjie Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
!23 = !DIFile(filename: "0-default", directory: ".")
!24 = !{!"_CGP7defaultiiHv"}
!25 = !{!"()->Int64.ti"}
!26 = !{!"Closure<()->Int64>.ti"}
!27 = !{!"std.core:Future<Int64>.ti"}
!28 = distinct !DISubprogram(scope: !30, file: !29, line: 1, type: !31, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!29 = !DIFile(filename: "", directory: "")
!30 = !DINamespace(name: "default", scope: null)
!31 = !DISubroutineType(types: !32)
!32 = !{}
!33 = !DILocation(line: 0, scope: !28)
!34 = distinct !DISubprogram(scope: !30, file: !35, line: 6, type: !31, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!35 = !DIFile(filename: "test.cj", directory: "/home/liso/unwind")
!36 = !DILocation(line: 7, column: 9, scope: !34)
!37 = distinct !DISubprogram(scope: !30, file: !29, line: 1, type: !31, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!38 = !DILocation(line: 0, scope: !37)
!39 = distinct !DISubprogram(scope: !30, file: !29, line: 1, type: !31, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!40 = !DILocation(line: 0, scope: !39)
!41 = distinct !DISubprogram(scope: !30, file: !35, line: 3, type: !31, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!42 = !DILocation(line: 4, column: 9, scope: !41)
!43 = distinct !DISubprogram(scope: !30, file: !29, line: 1, type: !31, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!44 = !DILocation(line: 0, scope: !43)
!45 = distinct !DISubprogram(scope: !30, file: !29, type: !31, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!46 = !DILocation(line: 0, scope: !45)
!47 = distinct !DISubprogram(scope: !30, file: !29, type: !31, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!48 = !DILocation(line: 0, scope: !47)
!49 = distinct !DISubprogram(scope: !30, file: !29, type: !31, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!50 = !DILocation(line: 0, scope: !49)
!51 = distinct !DISubprogram(scope: !30, file: !35, line: 14, type: !31, scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!52 = !DILocation(line: 15, column: 5, scope: !51)
!53 = !DILocation(line: 17, column: 15, scope: !54)
!54 = distinct !DILexicalBlock(scope: !51, file: !35, line: 17, column: 15)
!55 = !DILocation(line: 17, column: 9, scope: !54)
!56 = !DILocation(line: 16, column: 5, scope: !51)
!57 = !DILocation(line: 18, column: 25, scope: !58)
!58 = distinct !DILexicalBlock(scope: !51, file: !35, line: 18, column: 25)
!59 = !DILocation(line: 18, column: 12, scope: !58)
!60 = !DILocation(line: 0, scope: !58)
!61 = !DILocation(line: 23, column: 9, scope: !62)
!62 = distinct !DILexicalBlock(scope: !51, file: !35, line: 23, column: 17)
!63 = !DILocation(line: 25, column: 1, scope: !51)
!64 = !DILocation(line: 19, column: 9, scope: !65)
!65 = distinct !DILexicalBlock(scope: !58, file: !35, line: 19, column: 15)
!66 = !DILocation(line: 20, column: 9, scope: !65)
!67 = !DILocation(line: 0, scope: !65)
!68 = !DILocation(line: 0, scope: !62)
!69 = distinct !DISubprogram(scope: !30, file: !35, line: 2, type: !31, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!70 = !DILocation(line: 0, scope: !69)
!71 = !DILocation(line: 3, column: 11, scope: !69)
!72 = !DILocation(line: 3, column: 5, scope: !69)
!73 = !DILocation(line: 6, column: 10, scope: !69)
!74 = !DILocation(line: 6, column: 5, scope: !69)
!75 = !DILocation(line: 9, column: 13, scope: !69)
!76 = !DILocation(line: 9, column: 5, scope: !69)
!77 = !DILocation(line: 10, column: 5, scope: !69)
!78 = distinct !DISubprogram(scope: !30, file: !35, line: 14, type: !31, scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !22, retainedNodes: !32)
!79 = !DILocation(line: 14, column: 1, scope: !78)
!80 = !DILocation(line: 0, scope: !78)
